#ifndef SESSIONFRIENDAREA_H
#define SESSIONFRIENDAREA_H

#include <QWidget>
#include <QScrollArea>
#include <QLabel>

//////////////////////////////////////////////////////////////
///滚动区域item的类型
//////////////////////////////////////////////////////////////
enum ItemType
{
    SessionItemType,
    FriendItemType,
    ApplyItemType

};

//////////////////////////////////////////////////////////////
///整个滚动区域的实现
//////////////////////////////////////////////////////////////
class SessionFriendArea : public QScrollArea
{
    Q_OBJECT
public:
    explicit SessionFriendArea(QWidget *parent = nullptr);

    //清空所有item
    void clear();
    //添加iteam itemType 表示添加哪种 id根据type不同有不同含义
    void addItem(ItemType itemType, const QString& id, const QIcon& avatar, const QString& name, const QString& text);
    //选中某个指定的 item
    void clickItem(int index);

private:
    // 后续往 container 内部的 layout添加元素 就能出发QScrollArea的滚动效果
    QWidget* container;
signals:
};


//////////////////////////////////////////////////////////////
///滚动区域item的实现
//////////////////////////////////////////////////////////////
class SessionFriendItem : public QWidget
{
    Q_OBJECT
public:
    SessionFriendItem(QWidget* owner, const QIcon& avatar, const QString& name, const QString& text);

    void paintEvent(QPaintEvent *event) override;
    //鼠标点击事件
    void mousePressEvent(QMouseEvent* event) override;
    //鼠标悬停事件
    void enterEvent(QEnterEvent* event) override;
    //离开事件
    void leaveEvent(QEvent* event) override;
    //选中
    void select();
    //实现item被点击后的逻辑
    virtual void active();

private:
    //owner 指向了 上述的 SessionFriendArea
    QWidget* owner;
    //表示这个item是否选中
    bool selected = false;
protected:
    //便于让子类访问
    QLabel* messageLabel;
};

//////////////////////////////////////////////////////////////
///会话item的实现
//////////////////////////////////////////////////////////////
class SessionItem : public SessionFriendItem
{
    Q_OBJECT
public:
    SessionItem(QWidget* owner, const QString& chatSessionId, const QIcon& avatar,
             const QString& name, const QString& lastMessage);

    void active() override;

    void updateLastMessage(const QString& chatSessionId);

private:
    //当前会话id
    QString chatSessionId;

    //最后一条消息的文本
    QString lastMessageText;
};

//////////////////////////////////////////////////////////////
///好友item的实现
//////////////////////////////////////////////////////////////
class FriendItem : public SessionFriendItem
{
    Q_OBJECT
public:
    FriendItem(QWidget* owner, const QString& userId, const QIcon& avatar,
               const QString& name, const QString& description);
    void active() override;
private:
    //好友id
    QString userId;

};

//////////////////////////////////////////////////////////////
///好友申请item的实现
//////////////////////////////////////////////////////////////
class ApplyItem : public SessionFriendItem
{
    Q_OBJECT
public:
    ApplyItem(QWidget* owner, const QString& userId, const QIcon& avatar,
               const QString& name); //后面是同意还是拒绝 不用加内容
    void active() override;

    //同意好友申请
    void acceptFriendApply();

    //拒绝好友申请
    void rejectFriendApply();

private:
    //申请人id
    QString userId;
};

#endif // SESSIONFRIENDAREA_H










